use md5::{Md5, Digest};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn compute_md5(data: &[u8]) -> String {
    // 创建一个 Md5 哈希对象
    let mut hasher = Md5::new();

    // 更新哈希对象
    hasher.update(data);

    // 获取最终的哈希值
    let result = hasher.finalize();

    // 将哈希值转换为十六进制字符串
    format!("{:x}", result)
}

#[wasm_bindgen]
pub async fn compute_file_md5(file: web_sys::File) -> Result<String, JsValue> {
    use wasm_bindgen_futures::JsFuture;
    use js_sys::Uint8Array;

    // 读取文件内容
    let array_buffer = JsFuture::from(file.array_buffer()).await?;
    let array = Uint8Array::new(&array_buffer);

    // 调用 compute_md5 函数计算 MD5 哈希值
    let data = array.to_vec();
    Ok(compute_md5(&data))
}